package com.bcs.compiler;

import java.util.ArrayList;

public interface Target {
	void initializeTarget();
	
	void callBinOp(Object target, String fnname, Object left, Object right);
	void callUnaryOp(Object target, String fnname, Object v);
	void assign(Object target, Object v);
	void assignLocal(int slot, Object v);
	void assignClosure(Object target, String fnname);
	void callSimpleFunction(int slot, String fnname);
	void callVoidRuntime(String fnname, Object param, Object param2);
	void invokeGet(Object target, Object obj, String field);
	void invokeGetAttr(Object target, Object obj, String field);
	void invokeGetDesc(Object target, Object obj, String field);
	void invokeSet(Object obj, String field, Object v);
	void invokeGetElem(Object target, Object obj, Object index);
	void invokeSetElem(Object obj, Object index, Object v);

	void invokeNew(Object target, Object classParam, ArrayList<Object> params);
	void invokeInvoke(Object target, Object fn, Object thisValue, ArrayList<Object> params);
}
